home *** CD-ROM | disk | FTP | other *** search
- /*
- * This file copied from GNU emacs... everything not relevant to
- * Sequent Symmetry has been removed... -fubar
- */
-
- /* C code startup routine.
- Copyright (C) 1985, 1986 Free Software Foundation, Inc.
-
- NO WARRANTY
-
- BECAUSE THIS PROGRAM IS LICENSED FREE OF CHARGE, WE PROVIDE ABSOLUTELY
- NO WARRANTY, TO THE EXTENT PERMITTED BY APPLICABLE STATE LAW. EXCEPT
- WHEN OTHERWISE STATED IN WRITING, FREE SOFTWARE FOUNDATION, INC,
- RICHARD M. STALLMAN AND/OR OTHER PARTIES PROVIDE THIS PROGRAM "AS IS"
- WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
- BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY
- AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE
- DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR
- CORRECTION.
-
- IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW WILL RICHARD M.
- STALLMAN, THE FREE SOFTWARE FOUNDATION, INC., AND/OR ANY OTHER PARTY
- WHO MAY MODIFY AND REDISTRIBUTE THIS PROGRAM AS PERMITTED BELOW, BE
- LIABLE TO YOU FOR DAMAGES, INCLUDING ANY LOST PROFITS, LOST MONIES, OR
- OTHER SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
- USE OR INABILITY TO USE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR
- DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY THIRD PARTIES OR
- A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS) THIS
- PROGRAM, EVEN IF YOU HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH
- DAMAGES, OR FOR ANY CLAIM BY ANY OTHER PARTY.
-
- GENERAL PUBLIC LICENSE TO COPY
-
- 1. You may copy and distribute verbatim copies of this source file
- as you receive it, in any medium, provided that you conspicuously and
- appropriately publish on each copy a valid copyright notice "Copyright
- (C) 1986 Free Software Foundation, Inc."; and include following the
- copyright notice a verbatim copy of the above disclaimer of warranty
- and of this License.
-
- 2. You may modify your copy or copies of this source file or
- any portion of it, and copy and distribute such modifications under
- the terms of Paragraph 1 above, provided that you also do the following:
-
- a) cause the modified files to carry prominent notices stating
- that you changed the files and the date of any change; and
-
- b) cause the whole of any work that you distribute or publish,
- that in whole or in part contains or is a derivative of this
- program or any part thereof, to be licensed at no charge to all
- third parties on terms identical to those contained in this
- License Agreement (except that you may choose to grant more extensive
- warranty protection to some or all third parties, at your option).
-
- c) You may charge a distribution fee for the physical act of
- transferring a copy, and you may at your option offer warranty
- protection in exchange for a fee.
-
- Mere aggregation of another unrelated program with this program (or its
- derivative) on a volume of a storage or distribution medium does not bring
- the other program under the scope of these terms.
-
- 3. You may copy and distribute this program (or a portion or derivative
- of it, under Paragraph 2) in object code or executable form under the terms
- of Paragraphs 1 and 2 above provided that you also do one of the following:
-
- a) accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of
- Paragraphs 1 and 2 above; or,
-
- b) accompany it with a written offer, valid for at least three
- years, to give any third party free (except for a nominal
- shipping charge) a complete machine-readable copy of the
- corresponding source code, to be distributed under the terms of
- Paragraphs 1 and 2 above; or,
-
- c) accompany it with the information you received as to where the
- corresponding source code may be obtained. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form alone.)
-
- For an executable file, complete source code means all the source code for
- all modules it contains; but, as a special exception, it need not include
- source code for modules which are standard libraries that accompany the
- operating system on which the executable file runs.
-
- 4. You may not copy, sublicense, distribute or transfer this program
- except as expressly provided under this License Agreement. Any attempt
- otherwise to copy, sublicense, distribute or transfer this program is void and
- your rights to use the program under this License agreement shall be
- automatically terminated. However, parties who have received computer
- software programs from you with this License Agreement will not have
- their licenses terminated so long as such parties remain in full compliance.
-
- 5. If you wish to incorporate parts of this program into other free
- programs whose distribution conditions are different, write to the Free
- Software Foundation at 675 Mass Ave, Cambridge, MA 02139. We have not yet
- worked out a simple rule that can be stated here, but we will often permit
- this. We will be guided by the two goals of preserving the free status of
- all derivatives of our free software and of promoting the sharing and reuse of
- software.
-
-
- In other words, you are welcome to use, share and improve this program.
- You are forbidden to forbid anyone else to use, share and improve
- what you give them. Help stamp out software-hoarding! */
-
-
- /* The standard Vax 4.2 Unix crt0.c cannot be used for Emacs
- because it makes `envron' an initialized variable.
- It is easiest to have a special crt0.c on all machines
- though I don't know whether other machines actually need it. */
-
- /* On the vax and 68000, in BSD4.2 and USG5.2,
- this is the data format on startup:
- (vax) ap and fp are unpredictable as far as I know; don't use them.
- sp -> word containing argc
- word pointing to first arg string
- [word pointing to next arg string]... 0 or more times
- 0
- Optionally:
- [word pointing to environment variable]... 1 or more times
- ...
- 0
- And always:
- first arg string
- [next arg string]... 0 or more times
- */
-
- /* On the 16000, at least in the one 4.2 system I know about,
- the initial data format is
- sp -> word containing argc
- word containing argp
- word pointing to first arg string, and so on as above
- */
-
- #define CRT0_DUMMIES bogus_fp,
- #define DOT_GLOBAL_START
-
-
- /* ******** WARNING ********
- Do not insert any data definitions before data_start!
- Since this is the first file linked, the address of the following
- variable should correspond to the start of initialized data space.
- On some systems this is a constant that is independent of the text
- size for shared executables. On others, it is a function of the
- text size. In short, this seems to be the most portable way to
- discover the start of initialized data space dynamically at runtime,
- for either shared or unshared executables, on either swapping or
- virtual systems. It only requires that the linker allocate objects
- in the order encountered, a reasonable model for most Unix systems.
- Similarly, note that the address of _start() should be the start
- of text space. Fred Fish, UniSoft Systems Inc. */
-
- int data_start = 0;
-
- #ifdef NEED_ERRNO
- int errno;
- #endif
-
- #ifndef DONT_NEED_ENVIRON
- char **environ;
- #endif
-
- /* Define symbol "start": here; some systems want that symbol. */
- #ifdef DOT_GLOBAL_START
- asm(" .text ");
- asm(" .globl start ");
- asm(" start: ");
- #endif /* DOT_GLOBAL_START */
-
- #ifdef NODOT_GLOBAL_START
- asm(" text ");
- asm(" global start ");
- asm(" start: ");
- #endif /* NODOT_GLOBAL_START */
-
- _start ()
- {
- /* On vax, nothing is pushed here */
- /* On sequent, bogus fp is pushed here */
- start1 ();
- }
-
- static
- start1 (CRT0_DUMMIES argc, xargv)
- int argc;
- char *xargv;
- {
- register char **argv = &xargv;
- environ = argv + argc + 1;
-
- if ((char *)environ == xargv)
- environ--;
- exit (main (argc, argv, environ));
- }
-